#region Header
//=============================================================================
//                          GShield (Game Shield)
//=============================================================================
//
// Original Programmer: Shawn Jackson
// Company: WaveTech Digital Technologies, Inc. (http://www.wtdt.com)
// Copyright: (c) 2006 WaveTech Digital Technologies, Inc. All Rights Reserved.
// Assembly: Library
// Code File Name: GameProcess.cs
// Code File Date: 12/8/2006
//
// Code File Info: Game Process Object Definiation
//=============================================================================
/*
 * UPDATES
 * -------
 *      ShawnJ 5/4/2007 (0.9.0.x): Refactoring for OSS.
 *			ShawnJ 8/7/2007 (0.9.5.x): Code Commenting.
 */
#endregion Header

#region License
/*
  GShield - Game Shield
  Copyright (C) 2006-2007 WaveTech Digital Technologies, Inc.
                                http://www.wtdt.com

  This program is free software; you can redistribute it and/or modify
  it under the terms of the GNU General Public License as published by
  the Free Software Foundation; either version 2 of the License, or
  (at your option) any later version.

  This program is distributed in the hope that it will be useful,
  but WITHOUT ANY WARRANTY; without even the implied warranty of
  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  GNU General Public License for more details.

  You should have received a copy of the GNU General Public License
  along with this program; if not, write to the Free Software
  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
*/
#endregion License

#region Includes
using System;
using System.Diagnostics;
using WaveTech.GShield.Library.Collections;
#endregion Includes

namespace WaveTech.GShield.Library.Objects
{
  /// <summary>
  /// Class Defining a Game Process object
  /// </summary>
	[Serializable]
  public class GameProcess
	{
		#region Private Members
		private int? m_id;
		private string m_name;
		private string m_fullPath;
		private string m_company;
		private string m_internalName;
		private string m_productName;
		private string m_userName;
		private DateTime? m_startTime;
		private Process m_process;
		private GameProcessModulesCollection m_modules;
		#endregion Private Members

		#region Constructor
		public GameProcess()
    {
			m_modules = new GameProcessModulesCollection();
    }
    #endregion Constructor

    #region Public Properties
		/// <summary>
		/// Primary Identifier for this process
		/// </summary>
    public int? Id
    {
			get { return m_id; }
			set { m_id = value; }
    }

		/// <summary>
		/// Name of the process
		/// </summary>
    public string Name
    {
			get { return m_name; }
			set { m_name = value; }
    }

		/// <summary>
		/// Timestamp of when the process was started
		/// </summary>
    public DateTime? StartTime
    {
			get { return m_startTime; }
			set { m_startTime = value; }
    }

		/// <summary>
		/// Collection of Modules, assemblies, used by this process
		/// </summary>
    public GameProcessModulesCollection Modules
    {
			get { return m_modules; }
			set { m_modules = value; }
    }

		/// <summary>
		/// Full path to the location of this process's file
		/// </summary>
    public string FullPath
    {
			get { return m_fullPath; }
			set { m_fullPath = value; }
    }

		/// <summary>
		/// .Net base Process type for this process
		/// </summary>
    public Process Process
    {
			get { return m_process; }
			set { m_process = value; }
    }

		/// <summary>
		/// Company from the process file metadata
		/// </summary>
    public string Company
    {
			get { return m_company; }
			set { m_company = value; }
    }

		/// <summary>
		/// Internal name for the process from the file metadata
		/// </summary>
    public string InternalName
    {
			get { return m_internalName; }
			set { m_internalName = value; }
    }

		/// <summary>
		/// Product name from the file metadata
		/// </summary>
    public string ProductName
    {
			get { return m_productName; }
			set { m_productName = value; }
    }

		/// <summary>
		/// Windows username who currently owns the running process
		/// </summary>
    public string UserName
    {
			get { return m_userName; }
			set { m_userName = value; }
    }
    #endregion Public Properties
  }
}